package hashes.md5;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Klasse zum berechnen von einem MD5-Wert
 * @author d3rbastl3r
 */
public class ComputeMD5{
	public static final String ALGORITHM_NAME = "MD5";
	
	/**
	 * Generiert aus einem String einen MD5-Hashwert und liefert diesen als
	 * 32 Byte Array zurück.
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException 
	 */
	public static byte[] compute(String value){
		byte[] md5Bytes32;
		
		try{
			MessageDigest algorithm = MessageDigest.getInstance(ComputeMD5.ALGORITHM_NAME);
			algorithm.reset();
			algorithm.update(value.getBytes());
			md5Bytes32 = algorithm.digest();
			return md5Bytes32;
			
		}catch(NoSuchAlgorithmException e){
			throw new RuntimeException("Cannot compute md5-hash!");
		}
	}
	
	/**
	 * Erzeugt aus einem Byte-Array einen Hex-String
	 * @param bytes
	 * @return 
	 */
	public static String bytesToHexString(byte[] bytes){
		StringBuilder hexString = new StringBuilder();
		
		for (int i=0; i<bytes.length; i++) {
			hexString.append(Integer.toHexString(0xFF & bytes[i]));
		}
		
		return hexString.toString();
	}
}
